import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import vueJsx from "@vitejs/plugin-vue-jsx";
import dts from "vite-plugin-dts";

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    vueJsx(),
    dts({
      // 指定要生成声明文件的文件
      include: ["packages/**/*.ts", "packages/**/*.tsx", "packages/**/*.vue"],
      // 排除文件
      exclude: [
        "vite.config.ts",
        "node_modules/**",
        "**/*.spec.ts",
        "**/*.test.ts",
      ],
      // 输出目录
      outDir: "lib",
      // 静态导入
      staticImport: true,
      // 插入入口
      insertTypesEntry: true,
      // 清理输出目录中的 .vue 文件名
      cleanVueFileName: true,
      // 编译所有文件，包括外部依赖的类型
      copyDtsFiles: false,
      // 不使用 rollupTypes，保持原始的文件结构
      rollupTypes: false,
      // 日志级别
      logLevel: "info",
      // 编译后的钩子
      afterBuild: () => {
        console.log("声明文件生成完成！");
      },
      // 解决类型声明中的外部依赖问题
      compilerOptions: {
        paths: {
          "ant-design-vue/*": ["./node_modules/ant-design-vue/*"]
        }
      }
    }),
  ],
  publicDir: false, // 禁用 public 目录复制
  server: {
    port: 5177,
  },
  build: {
    outDir: "lib",
    lib: {
      entry: "./packages/index.ts",
      name: "earthsdk-ui",
      fileName: (format) => `earthsdk-ui.${format}.js`,
      formats: ["es", "umd"],
    },
    rollupOptions: {
      // 确保外部化处理那些你不想打包进库的依赖
      external: [
        "vue",
        "earthsdk3",
        "earthsdk-icon",
        "ant-design-vue",
        "ant-design-vue/*"
      ],
      output: {
        // 明确指定导出格式以避免警告
        exports: "named",
        // 指定CSS文件名
        assetFileNames: "style.css",
        // 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量
        globals: {
          vue: "Vue",
          earthsdk3: "EarthSDK3",
          "earthsdk-icon": "EarthsdkIcon",
          "ant-design-vue": "antd"
        },
      },
    },
  },
});
